package com.flycms.module.qasystem.dao;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.flycms.module.qasystem.model.Answers;

/**
 * 回答类Dao
 *
 * <br/>Copyright 2020
 * <br/>All rights reserved
 * @author 沁言訫語
 * @version 2020年2月17日
 * @Date 2020年2月17日
 */

@Repository
public interface AnswersDao {

    int addAnswer(Answers answer);
    
    int editAnswer(Answers answer);
    
    List<Answers> getAnswerList(
            @Param("replyUserId") Long replyUserId,
            @Param("questionId") Long questionId,
            @Param("status") Integer status,
            @Param("orderby") String orderby,
            @Param("order") String order,
            @Param("pageIndex") Integer pageIndex,
            @Param("pageSize") Integer pageSize);
    
    int getAnswerCount(
            @Param("replyUserId") Long replyUserId,
            @Param("questionId") Long questionId,
            @Param("status") Integer status);
    
    List<Answers> getQuestionAnswerList(
            @Param("questionId") Long questionId,
            @Param("status") Integer status,
            @Param("pageIndex") Integer pageIndex,
            @Param("pageSize") Integer pageSize);
    
    int getQuestionAnswerCount(
            @Param("questionId") Long questionId,
            @Param("status") Integer status);
    
    Answers queryAnswerById(@Param("id") Long id, @Param("status") Integer status);
    
    int removeAnswerById(@Param("id") Long id, @Param("userId") Long userId);
    
    int editAnswerByQuestionId(@Param("questionId") Long questionId,
            @Param("status") Integer status,
            @Param("updateTime") Date updateTime,
            @Param("updateUserId") Long updateUserId);
    
    int removeAnswerByQuestionId(@Param("questionId") Long questionId);
    
    int editAnswerVote(@Param("id") Long id,
            @Param("upCount") Integer upCount,
            @Param("downCount") Integer downCount);
    
    List<Answers> getMaxUpCountAnswersForQuetsion(@Param("ids") List<Long> ids);
    
    List<Answers> getHotAnswerList(
            @Param("status") Integer status,
            @Param("pageIndex") Integer pageIndex,
            @Param("pageSize") Integer pageSize);
    
    List<Answers> getMaxUpCountAnswersForView(@Param("questionId") Long questionId,
            @Param("status") Integer status,
            @Param("pageSize") Integer pageSize);
    
}
